package com.xinqi.modules.discuss.notice.service;

import com.xinqi.common.base.response.PageInfo;
import com.xinqi.common.base.response.Param;
import com.xinqi.common.mybatis.data.service.BaseService;
import com.xinqi.modules.discuss.notice.domain.CourseNoticeEntity;
import com.xinqi.modules.discuss.notice.domain.CourseNoticeStudentLogEntity;
import com.xinqi.modules.discuss.notice.dto.req.CourseNoticeStudentLogQueryDTO;
import com.xinqi.modules.discuss.notice.dto.rsp.CourseNoticeResultDTO;
import com.xinqi.modules.discuss.notice.dto.rsp.CourseNoticeStudentLogResultDTO;

import java.util.List;


/**
 * 服务层
 *
 * @author: yyzhen
 * @date: 2023/03/21
 */
public interface CourseNoticeStudentLogService extends BaseService<CourseNoticeStudentLogEntity> {

    /**
     * 根据公告删除
     *
     * @param contentId
     */
    void deleteByContentId(Long contentId);

    /**
     * 根据公告批量删除
     *
     * @param contentIds
     */
    void deleteByContentIds(List<Long> contentIds);

    /**
     * 通过公告ID和学生ID获取详细
     *
     * @param contentId
     * @param studentId
     * @return
     */
    CourseNoticeStudentLogEntity selectByNoticeIdAndStudentId(Long contentId, Long studentId);

    /**
     * 通过公告ID获取列表
     *
     * @param contentId
     * @return
     */
    List<CourseNoticeStudentLogEntity> selectByContentId(Long contentId);

    /**
     * 根据公告ID集合和学生ID获取列表
     *
     * @param contentIds
     * @param studentId
     * @return
     */
    List<CourseNoticeStudentLogEntity> selectByNoticeIdAndStudentId(List<Long> contentIds, Long studentId);

    /**
     * 查询学生记录
     *
     * @param pageable
     * @param query
     * @return
     */
    PageInfo<CourseNoticeStudentLogResultDTO> selectPage(Param pageable, CourseNoticeStudentLogQueryDTO query);

    /**
     * 同步学生设置
     *
     * @param entity
     */
    void synchroStudent(CourseNoticeEntity entity);

    /**
     * 同步学生设置
     *
     * @param noticeList
     */
    void synchroStudent(List<CourseNoticeEntity> noticeList);

    /**
     * 新增学生同步
     *
     * @param noticeList
     * @param classId
     * @param userId
     */
    void synchroStudent(List<CourseNoticeEntity> noticeList, Long classId, Long userId);

    /**
     * 已读
     *
     * @param result
     * @param userId
     */
    void synchroRead(CourseNoticeResultDTO result, Long userId);

}
